package com.fjsh;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 基于redis认证服务器
 * 此处已经实现授权模式，token刷新
 *
 * 1.准备数据库-用户角色权限相关内容可根据自身需要替换
 * 2.数据源在Nacos中配置，故需引入Nacos相关依赖，见：
 *  <dependency>
 *      <groupId>com.fjsh</groupId>
 *      <artifactId>com-fjsh-common-nacos</artifactId>
 *      <version>${project.version}</version>
 *  </dependency>
 * 3.思路：oAuth2有四种模式-简单模式，授权模式，密码模式，客户端模式
 * 首先我们需要先进行用户信息配置，详见：WebSecurityConfiguration
 * 然后再进行认证配置，详见：AuthorizationServerConfiguration
 *
 * 用户信息配置我们需要重写UserDetailsService类，将我们的用户角色权限信息交给oAuth2管理
 * 注意点：若开启刷新token功能时，必须在认证端点配置用户信息以及认证管理器
 *
 * 授权码模式示例
 * 获取授权码url（get）: http://localhost:5001/oauth/authorize?client_id=client&response_type=code
 * 授权码换取token(post): http://client:secret@127.0.0.1:5001/oauth/token  表单参数：grant_type=authorization_code & code=Y9Yw9s
 *
 * TODO：新增，重置，删除客户端（client_id，secret_id），使其实现第三方登录
 */
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan(basePackages = "com.fjsh.mapper")
public class Oauth2Application {

    public static void main(String[] args) {

        SpringApplication.run(Oauth2Application.class, args);

    }

}
